package filelisting

import (
	"errors"
	"io/ioutil"
	"net/http"
	"os"
	"strings"
)

const prefix  = "/list/"

// 实现 UserError 接口
type UserError string

// 实现 UserError 接口 里面的方法
func (e UserError) Error() string {
	return e.Message()
}

// 实现 UserError 接口 里面的方法
func (e UserError) Message() string {
	return string(e)
}

// 定义成一个函数类型
func AppHandelFileList(writer http.ResponseWriter, request *http.Request) error {

	if strings.Index(request.URL.Path, prefix) != 0 {
		return errors.New("没有" + prefix + " 的前缀路径！")
	}

	// 获取路径
	// 获取 request.URL.Path 这个全路径，但是要把请求 "/list/" 去掉，才能拿到文件路径
	// 相当于就是 request.URL.Path 进行了切片，从 "/list/" 位置开始截取
	path := request.URL.Path[len(prefix):]
	// 打开文件流
	file, err := os.Open(path)
	if err != nil {
		// panic(err)

		// 设置响应错误信息，状态为 500
		http.Error(writer, err.Error(),http.StatusInternalServerError)

		// 表示不继续往下执行
		return err
	}

	defer file.Close()

	// 读取文件里面所有的信息
	all, err := ioutil.ReadAll(file)
	if err != nil {
		//panic(err)
		return err
	}

	// 写入响应流
	writer.Write(all)

	return nil

}
